#include "fractii.h"


fractie::fractie(int x, int y)
{
    numarator=x, numitor=y;
}

fractie::fractie()
{
   /* cout<<"Numarator=";
    cin>>numarator;
    cout<<"Numitor=";
    cin>>numitor;*/
    numarator=numitor=1;
}

fractie::~fractie()
{
    //cout<<endl<<"blown object";
}

fractie fractie::operator+(fractie x)
{
    int num,nr;
    if (numitor==x.numitor)
    {
        num=numitor;
        nr=numarator+x.numarator;
    }
    else {
        int t1=x.numitor,t2=x.numarator;
        t1=t1*numitor;
        t2=t2*numitor;
        num=numarator*x.numitor+t2;
        nr=x.numitor*numitor+t1;
    }
    fractie rezultat(num,nr);
    //rezultat.simplificare();
    return rezultat;
}
fractie fractie::operator-(fractie x)
{
    int num,nr;
    if (numitor==x.numitor)
    {
        num=numitor;
        nr=numarator-x.numarator;
    }
    else {
        int t1=x.numitor,t2=x.numarator;
        t1=t1*numitor;
        t2=t2*numitor;
        num=numarator*x.numitor-t2;
        nr=x.numitor*numitor+t1;
    }
    fractie rezultat(num,nr);
    //rezultat.simplificare();
    return rezultat;
}
fractie fractie::operator*(fractie x)
{
    int num,nr;
    num=numarator*x.numarator;
    nr=numitor*x.numitor;
    fractie rezultat(num,nr);
    return rezultat;
}

fractie fractie::operator/(fractie x)
{
    fractie temp(x.numitor,x.numarator), rezultat(1,1);
    rezultat.numarator=numarator*temp.numarator;
    rezultat.numitor=numitor*temp.numitor;
    return rezultat;
}

void fractie::operator=(fractie x)
{
    numarator=x.numarator;
    numitor=x.numitor;
}

ostream& operator<<(ostream& out, fractie x)
{
    out<<x.numarator<<"/"<<x.numitor<<endl;
    return out;
}
istream&operator>>(istream& in, fractie x)
{
    cout<<"Numarator=";
    cin>>x.numarator;
    cout<<"Numitor=";
    cin>>x.numitor;
    return in;
}

void fractie::simplificare()
{
    int cmmdc,a=this->numarator,b=this->numitor,t;
    while (b!=0)
    {
        t=b;
        b=a%b;
        a=t;
    }
    cmmdc=a;
    numarator=numarator/cmmdc;
    numitor=numitor/cmmdc;
}

bool fractie::operator<(fractie x)
{
    int num,nr;
    if (numitor==x.numitor)
    {
        if (numarator<x.numarator)
            return true;
        else 
            return false;
    }
    else {
        int t1=x.numarator, t2=x.numitor;
        num=numitor*t2;
        nr=numarator*t2;
        t1=t1*numitor;
        t2=t2*numitor;
        if (num<t1)
            return true;
        else
            return false;
    }
}

